﻿using System;

namespace 第七题
{
    /*按要求编写一个控制台应用程序:
    1）定义一个抽象类Animal，其中包括属性name，相关构造方法，抽象方法enjoy()表示动物高兴时动作。*/
    abstract class Animal
    {
        public String name { get; set; }
        public Animal() { }
        public Animal(String name)
        {
            this.name = name;
        }
        public abstract void enjoy();
    }
    //2）定义Cat类继承于Animal类，其中包括属性eyesColor，相关构造方法，同时具体化父类中的抽象方法。
    class Cat : Animal 
    {
        public String eyesColor { get; set; }
        public Cat() { }
        public Cat(String eyesColor)
        {
            this.eyesColor = eyesColor;
        }
        public override void enjoy()
        {
           Console.WriteLine("猫笑一笑");
        }
    }
    //3）定义Dog类继承于Animal类，其中包括属性furColor，相关构造方法，同时具体化父类中的抽象方法。
    class Dog : Animal 
    {
        public String furColor { get; set; }
        public Dog() { }
        public Dog(String furColor) 
        {
            this.furColor = furColor;
        }
        public override void enjoy()
        {
           Console.WriteLine("狗叫一叫");
        }
    }
    //4）定义Lady类，其中包括属性name,以及Animal类型的属性pet表示女士所养的宠物，
    //定义构造方法，生成女士对象时初始化姓名和她所养的宠物。
    //定义一个方法：myPetEnjoy表示此女士的宠物在高兴时的动作。
    class Lady
    {
        public String name { get; set; }
        public Animal pet { get; set; }
        public Lady() 
        {
            this.name = null;
            this.pet = null;
        }
        public void myPetEnjoy() 
        {
            pet.enjoy();
        }
    }

//5）定义测试类。

//创建一个张女士，养了一只猫，让这只猫笑一笑

//创建一个王女士，养了一只狗，让这只狗叫一叫

    class Program
    {
        static void Main(string[] args)
        {
            Animal cat = new Cat();
            Animal dog = new Dog();
            Lady lady = new Lady();
            lady.name ="张女士";
            lady.pet =cat;
            lady.myPetEnjoy();
            Lady lady1 = new Lady();
            lady1.name = "王女士";
            lady1.pet = dog;
            lady1.myPetEnjoy();


        }
    }
}
